Soru & Cevap

Play/Pause Butonuna Hızlıca Basıldığında Seç Çalmada Hata

23.09.2016 - 12:05

Arkadaşlar merhaba. İlk Android projemi geliştirme aşamasındayım. Lakin bir noktada takıldım, çözemiyorum. Şimdi uygulamayı kısaca anlatayım. Beş tane buton var ve bu butonların her birisine tıklandığında bir tane ses seçiliyor. Bu beş butonun altında da bir tane play/pause butonu var. yukarıdaki butonlardan sesi seçip alttaki play butonuna bastığımda seçmiş olduğum ses çalınıyor. Ama sorun şu ki ben play butonuna hızlı hızlı bastığımda işlem bu hıza yetişemiyor ve ses durması gerekirken durmuyor çalmaya devam ediyor. Tekrar playa basınca da ses çaldığı halde tekrar çalıyor iki defa üç defa aynı anda ses çalıyor. Kodlarım aşağıdaki gibidir. Bu konuda yardımlarınızı bekliyorum, nasıl yapsam bu sorunu aşabilir daha stabil bir hale getirebilirim. Şimdiden teşekkür ederim. 

package com.bebekuyutucu;

import android.graphics.Typeface;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AppCompatActivity {

    private SoundPool soundPool;
    private int soundID;
    boolean plays,  loaded = false;
    float actVolume, maxVolume, volume;
    AudioManager audioManager;
    int counter;
    //String voice = null;
    private int selected_voice = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ImageView iv, anne, muzik, supurge, fon, ninni;
        final SeekBar seekBar;
        final TextView tv = (TextView) findViewById(R.id.textView);


        // AudioManager audio settings for adjusting the volume
        audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        actVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        volume = actVolume / maxVolume;

        //Hardware buttons setting to adjust the media sound
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

        // the counter will help us recognize the stream id of the sound played  now
        counter = 0;

        rekamYukle ();

        Typeface cocoFont = Typeface.createFromAsset(getAssets(), "fonts/Cocogoose_trial.otf");
        tv.setTypeface(cocoFont);
        seekBar = (SeekBar) findViewById(R.id.seekBar);
        iv = (ImageView) findViewById(R.id.imageView3);
        ninni = (ImageView) findViewById(R.id.imageView4);
        anne = (ImageView) findViewById(R.id.imageView5);
        supurge = (ImageView) findViewById(R.id.imageView6);
        fon = (ImageView) findViewById(R.id.imageView7);
        muzik = (ImageView) findViewById(R.id.imageView8);

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                tv.setText(progress + " dk");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

        anne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                anne.setImageResource(R.mipmap.annex);
                fon.setImageResource(R.mipmap.fon);
                muzik.setImageResource(R.mipmap.muzik);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninni);
                selected_voice = R.raw.annekarni;
                soundID = soundPool.load(getApplicationContext(), selected_voice, counter);
                soundPool.stop(soundID);
            }
        });

        muzik.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                anne.setImageResource(R.mipmap.anne);
                fon.setImageResource(R.mipmap.fon);
                muzik.setImageResource(R.mipmap.muzikx);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninni);
                selected_voice = R.raw.muzik_kutusu;
                soundID = soundPool.load(getApplicationContext(), selected_voice, counter);
                soundPool.stop(soundID);
            }
        });

        supurge.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                muzik.setImageResource(R.mipmap.muzik);
                fon.setImageResource(R.mipmap.fon);
                anne.setImageResource(R.mipmap.anne);
                supurge.setImageResource(R.mipmap.supurgex);
                ninni.setImageResource(R.mipmap.ninni);
                selected_voice = R.raw.supurge;
                soundID = soundPool.load(getApplicationContext(), selected_voice, counter);
                soundPool.stop(soundID);
            }
        });
        fon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                anne.setImageResource(R.mipmap.anne);
                fon.setImageResource(R.mipmap.fonx);
                muzik.setImageResource(R.mipmap.muzik);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninni);
                selected_voice = R.raw.fon_sesi;
                soundID = soundPool.load(getApplicationContext(), selected_voice, counter);
                soundPool.stop(soundID);
            }
        });
        ninni.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                muzik.setImageResource(R.mipmap.muzik);
                fon.setImageResource(R.mipmap.fon);
                anne.setImageResource(R.mipmap.anne);
                supurge.setImageResource(R.mipmap.supurge);
                ninni.setImageResource(R.mipmap.ninnix);
                selected_voice = R.raw.ninnisesi;
                soundID = soundPool.load(getApplicationContext(), selected_voice, counter);
                soundPool.stop(soundID);
            }
        });

        try {
            soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC,5);
        }catch (Exception hata){
            Toast.makeText(MainActivity.this, "Hata: "+hata, Toast.LENGTH_LONG).show();
        }


        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (tv.getText().toString().equals("0 dk")) {
                    Toast.makeText(MainActivity.this, "Lütfen sesi seçip, süreyi ayarlayınız.", Toast.LENGTH_SHORT).show();
                } else if (selected_voice == 0) {
                    Toast.makeText(MainActivity.this, "Lütfen sesi seçiniz.", Toast.LENGTH_SHORT).show();
                }else {
                    try {
                            if (!plays) {
                                soundPool.play(soundID, volume, volume, 1, seekBar.getProgress() * 12, 1f);
                                counter = counter++;
                                plays = true;
                                iv.setImageResource(R.mipmap.butondurdur);
                            }else if (plays) {
                                soundPool.stop(soundID);
                                plays = false;
                                iv.setImageResource(R.mipmap.butonbaslat);
                            }

                    }catch (Exception hata){
                        Toast.makeText(MainActivity.this, "Hata :"+hata, Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }

    private void rekamYukle() {
        AdView adView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder()
                .setRequestAgent("android_studio:ad_template").build();
        adView.loadAd(adRequest);
    }
}
10 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user playablegraphs
playablegraphs
14.10.2016 - 01:42
 if (!plays) {
           soundPool.play(soundID, volume, volume, 1, seekBar.getProgress() * 12, 1f);
                                counter = counter++;
                                plays = !plays;
                                iv.setImageResource(R.mipmap.butondurdur);
                            }else if (plays) {
                                soundPool.stop(soundID);
                                plays = !plays;
                                iv.setImageResource(R.mipmap.butonbaslat);
                            }

Hocam bu kodu bi denermisin? 

olmaz ise plays bool'unu return ile ayarla yine olmazsa bir timer ile 0.1 sn veya 0.2 sn tepkime süreleri ayarlar